`CPVT_VariableText` 类是一个复杂的类，用于处理 PDF 文档中可变文本注释的布局和管理。它提供了对文本内容、格式设置、字体映射、以及文本位置和尺寸的全面控制。以下是该类的主要功能和方法概述：

### 公有成员

#### 内部类 `Iterator`

- **构造函数 `explicit Iterator(CPVT_VariableText * pVT)`* * :
-功能：创建一个迭代器实例，接收指向 `CPVT_VariableText` 的指针。

- **析构函数 `~Iterator()`* * :
-功能：释放迭代器占用的资源。

- **方法 `bool NextWord()`* * :
-功能：移动到下一个单词，并返回是否成功。

- **方法 `bool NextLine()`* * :
-功能：移动到下一行，并返回是否成功。

- **方法 `bool GetWord(CPVT_Word & word) const`* * :
-功能：获取当前迭代器位置的单词信息，并填充 `CPVT_Word` 结构体。

- **方法 `bool GetLine(CPVT_Line & line) const`* * :
-功能：获取当前迭代器位置的行信息，并填充 `CPVT_Line` 结构体。

- **方法 `void SetAt(int32_t nWordIndex)`* * :
-功能：将迭代器设置到指定的单词索引位置。

- **方法 `void SetAt(const CPVT_WordPlace & place)`* * :
-功能：将迭代器设置到指定的 `CPVT_WordPlace` 位置。

- **方法 `const CPVT_WordPlace & GetWordPlace() const`* * :
-功能：返回当前迭代器位置的 `CPVT_WordPlace`。

#### 内部类 `Provider`

- **构造函数 `explicit Provider(IPVT_FontMap * pFontMap)`* * :
-功能：创建一个提供者实例，接收指向 `IPVT_FontMap` 的指针。

- **析构函数 `virtual ~Provider()`* * :
-功能：释放提供者占用的资源。

- **方法 `virtual int GetCharWidth(int32_t nFontIndex, uint16_t word)`* * :
-功能：获取指定字体索引和字符的宽度。

- **方法 `virtual int32_t GetTypeAscent(int32_t nFontIndex)`* * :
-功能：获取指定字体索引的上升高度（即字的最高点相对于基线的高度）。

- **方法 `virtual int32_t GetTypeDescent(int32_t nFontIndex)`* * :
-功能：获取指定字体索引的下降深度（即字的最低点相对于基线的深度）。

- **方法 `virtual int32_t GetWordFontIndex(uint16_t word, FX_Charset charset, int32_t nFontIndex)`* * :
-功能：根据给定的单词、字符集和当前字体索引，返回最适合显示该单词的字体索引。

- **方法 `virtual int32_t GetDefaultFontIndex()`* * :
-功能：返回默认字体索引。

- **方法 `IPVT_FontMap* GetFontMap()`* * :
-功能：返回指向 `IPVT_FontMap` 的指针。

#### 主类 `CPVT_VariableText`

- **构造函数 `explicit CPVT_VariableText(Provider * Provider)`* * :
-功能：创建一个 `CPVT_VariableText` 实例，接收指向 `Provider` 的指针。

- **析构函数 `~CPVT_VariableText()`* * :
-功能：释放 `CPVT_VariableText` 占用的资源。

- **方法 `void SetProvider(Provider * pProvider)`* * :
-功能：设置提供者对象。

- **方法 `Provider* GetProvider()`* * :
-功能：返回当前的提供者对象。

- **方法 `CPVT_VariableText: : Iterator * GetIterator()`* * :
-功能：获取一个新的迭代器实例。

- **方法 `CFX_FloatRect GetContentRect() const`* * :
-功能：返回文本内容的矩形区域。

- **方法 `void SetPlateRect(const CFX_FloatRect & rect)`* * :
-功能：设置文本框的矩形区域。

- **方法 `const CFX_FloatRect & GetPlateRect() const`* * :
-功能：返回文本框的矩形区域。

- **方法 `void SetAlignment(int32_t nFormat)`* * :
-功能：设置文本对齐方式（如左对齐、右对齐、居中等）。

- **方法 `void SetPasswordChar(uint16_t wSubWord)`* * :
-功能：设置密码字符（用于隐藏输入的文本）。

- **方法 `void SetLimitChar(int32_t nLimitChar)`* * :
-功能：设置文本的最大字符数限制。

- **方法 `void SetMultiLine(bool bMultiLine)`* * :
-功能：设置是否允许多行文本。

- **方法 `void SetAutoReturn(bool bAuto)`* * :
-功能：设置是否自动换行。

- **方法 `void SetFontSize(float fFontSize)`* * :
-功能：设置字体大小。

- **方法 `void SetCharArray(int32_t nCharArray)`* * :
-功能：设置字符数组的大小。

- **方法 `void SetAutoFontSize(bool bAuto)`* * :
-功能：设置是否自动调整字体大小以适应文本框。

- **方法 `void Initialize()`* * :
-功能：初始化文本对象。

- **方法 `bool IsValid() const`* * :
-功能：检查文本对象是否已正确初始化。

- **方法 `void RearrangeAll()`* * :
-功能：重新排列所有文本。

- **方法 `void RearrangePart(const CPVT_WordRange & PlaceRange)`* * :
-功能：重新排列指定范围内的文本。

- **方法 `void SetText(const WideString & text)`* * :
-功能：设置文本内容。

- **方法 `CPVT_WordPlace InsertWord(const CPVT_WordPlace & place, uint16_t word, FX_Charset charset)`* * :
-功能：在指定位置插入单词，并返回新单词的位置。

- **方法 `CPVT_WordPlace InsertSection(const CPVT_WordPlace & place)`* * :
-功能：在指定位置插入新的段落，并返回新段落的起始位置。

- **方法 `CPVT_WordPlace DeleteWords(const CPVT_WordRange & PlaceRange)`* * :
-功能：删除指定范围内的单词，并返回删除后的光标位置。

- **方法 `CPVT_WordPlace DeleteWord(const CPVT_WordPlace & place)`* * :
-功能：删除指定位置的单词，并返回删除后的光标位置。

- **方法 `CPVT_WordPlace BackSpaceWord(const CPVT_WordPlace & place)`* * :
-功能：删除光标前的单词，并返回删除后的光标位置。

- **方法 `int32_t GetTotalWords() const`* * :
-功能：返回总单词数。

- **方法 `float GetFontSize() const`* * :
-功能：返回字体大小。

- **方法 `int32_t GetAlignment() const`* * :
-功能：返回文本对齐方式。

- **方法 `uint16_t GetPasswordChar() const`* * :
-功能：返回密码字符。

- **方法 `int32_t GetCharArray() const`* * :
-功能：返回字符数组的大小。

- **方法 `int32_t GetLimitChar() const`* * :
-功能：返回字符数限制。

- **方法 `bool IsMultiLine() const`* * :
-功能：检查是否允许多行文本。

- **方法 `bool IsAutoReturn() const`* * :
-功能：检查是否自动换行。

- **方法 `CPVT_WordPlace GetBeginWordPlace() const`* * :
-功能：返回文本开头的单词位置。

- **方法 `CPVT_WordPlace GetEndWordPlace() const`* * :
-功能：返回文本结尾的单词位置。

- **方法 `CPVT_WordPlace GetPrevWordPlace(const CPVT_WordPlace & place) const`* * :
-功能：返回前一个单词的位置。

- **方法 `CPVT_WordPlace GetNextWordPlace(const CPVT_WordPlace & place) const`* * :
-功能：返回下一个单词的位置。

- **方法 `CPVT_WordPlace SearchWordPlace(const CFX_PointF & point) const`* * :
-功能：根据给定点查找对应的单词位置。

- **方法 `CPVT_WordPlace GetUpWordPlace(const CPVT_WordPlace & place, const CFX_PointF & point) const`* * :
-功能：返回向上移动后的新单词位置。

- **方法 `CPVT_WordPlace GetDownWordPlace(const CPVT_WordPlace & place, const CFX_PointF & point) const`* * :
-功能：返回向下移动后的新单词位置。

- **方法 `CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace & place) const`* * :
-功能：返回当前行的起始单词位置。

- **方法 `CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace & place) const`* * :
-功能：返回当前行的结束单词位置。

- **方法 `CPVT_WordPlace GetSectionBeginPlace(const CPVT_WordPlace & place) const`* * :
-功能：返回当前段落的起始单词位置。

- **方法 `CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace & place) const`* * :
-功能：返回当前段落的结束单词位置。

- **方法 `void UpdateWordPlace(CPVT_WordPlace & place) const`* * :
-功能：更新单词位置。

- **方法 `CPVT_WordPlace PrevLineHeaderPlace(const CPVT_WordPlace & place) const`* * :
-功能：返回上一行的起始单词位置。

- **方法 `CPVT_WordPlace NextLineHeaderPlace(const CPVT_WordPlace & place) const`* * :
-功能：返回下一行的起始单词位置。

- **方法 `int32_t WordPlaceToWordIndex(const CPVT_WordPlace & place) const`* * :
-功能：将单词位置转换为单词索引。

- **方法 `CPVT_WordPlace WordIndexToWordPlace(int32_t index) const`* * :
-功能：将单词索引转换为单词位置。

- **方法 `uint16_t GetSubWord() const`* * :
-功能：返回子单词（通常用于密码字符）。

- **方法 `float GetPlateWidth() const`* * :
-功能：返回文本框的宽度。

- **方法 `float GetPlateHeight() const`* * :
-功能：返回文本框的高度。

- **方法 `CFX_PointF GetBTPoint() const`* * :
-功能：返回文本框的基线起点坐标。

- **方法 `CFX_PointF GetETPoint() const`* * :
-功能：返回文本框的基线终点坐标。

- **方法 `CFX_PointF InToOut(const CFX_PointF & point) const`* * :
-功能：将内部坐标转换为外部坐标。

- **方法 `CFX_PointF OutToIn(const CFX_PointF & point) const`* * :
-功能：将外部坐标转换为内部坐标。

- **方法 `CFX_FloatRect InToOut(const CPVT_FloatRect & rect) const`* * :
-功能：将内部矩形区域转换为外部矩形区域。

- **方法 `float GetFontAscent(int32_t nFontIndex, float fFontSize) const`* * :
-功能：获取指定字体索引和字体大小的上升高度。

- **方法 `float GetFontDescent(int32_t nFontIndex, float fFontSize) const`* * :
-功能：获取指定字体索引和字体大小的下降深度。

- **方法 `int32_t GetDefaultFontIndex()`* * :
-功能：返回默认字体索引。

- **方法 `float GetLineLeading()`* * :
-功能：返回行间距。

- **方法 `float GetWordWidth(const CPVT_WordInfo & WordInfo) const`* * :
-功能：获取单词的宽度。

- **方法 `float GetWordWidth(int32_t nFontIndex, uint16_t Word, uint16_t SubWord, float fFontSize, float fWordTail) const`* * :
-功能：根据指定参数计算单词的宽度。

- **方法 `float GetWordAscent(const CPVT_WordInfo & WordInfo) const`* * :
-功能：获取单词的上升高度。

- **方法 `float GetWordDescent(const CPVT_WordInfo & WordInfo) const`* * :
-功能：获取单词的下降深度。

- **方法 `float GetWordAscent(const CPVT_WordInfo & WordInfo, float fFontSize) const`* * :
-功能：根据指定字体大小获取单词的上升高度。

- **方法 `float GetWordDescent(const CPVT_WordInfo & WordInfo, float fFontSize) const`* * :
-功能：根据指定字体大小获取单词的下降深度。

- **方法 `float GetLineAscent()`* * :
-功能：返回当前行的上升高度。

- **方法 `float GetLineDescent()`* * :
-功能：返回当前行的下降深度。

- **方法 `float GetLineIndent()`* * :
-功能：返回行缩进值。

### 私有成员

- **方法 `int GetCharWidth(int32_t nFontIndex, uint16_t Word, uint16_t SubWord) const`* * :
-功能：获取指定字符的宽度。

- **方法 `int32_t GetWordFontIndex(uint16_t word, FX_Charset charset, int32_t nFontIndex)`* * :
-功能：根据给定的单词、字符集和当前字体索引，返回最适合显示该单词的字体索引。

- **方法 `CPVT_WordPlace AddSection(const CPVT_WordPlace & place)`* * :
-功能：在指定位置添加新的段落，并返回新段落的起始位置。

- **方法 `CPVT_WordPlace AddLine(const CPVT_WordPlace & place, const CPVT_LineInfo & lineinfo)`* * :
-功能：在指定位置添加新行，并返回新行的起始位置。

- **方法 `CPVT_WordPlace AddWord(const CPVT_WordPlace & place, const CPVT_WordInfo & wordinfo)`* * :
-功能：在指定位置添加新单词，并返回新单词的位置。

- **方法 `float GetWordFontSize() const`* * :
-功能：返回当前单词的字体大小。

- **方法 `void ClearSectionRightWords(const CPVT_WordPlace & place)`* * :
-功能：清除指定位置右侧的所有单词。

- **方法 `bool ClearEmptySection(const CPVT_WordPlace & place)`* * :
-功能：清除空段落。

- **方法 `void ClearEmptySections(const CPVT_WordRange & PlaceRange)`* * :
-功能：清除指定范围内的空段落。

- **方法 `void LinkLatterSection(const CPVT_WordPlace & place)`* * :
-功能：链接后续段落。

- **方法 `void ClearWords(const CPVT_WordRange & PlaceRange)`* * :
-功能：清除指定范围内的单词。

- **方法 `CPVT_WordPlace ClearLeftWord(const CPVT_WordPlace & place)`* * :
-功能：清除光标左侧的单词，并返回新的光标位置。

- **方法 `CPVT_WordPlace ClearRightWord(const CPVT_WordPlace & place)`* * :
-功能：清除光标右侧的单词，并返回新的光标位置。

- **方法 `void Rearrange(const CPVT_WordRange & PlaceRange)`* * :
-功能：重新排列指定范围内的文本。

- **方法 `float GetAutoFontSize()`* * :
-功能：计算并返回自动调整后的字体大小。

- **方法 `bool IsBigger(float fFontSize) const`* * :
-功能：检查当前字体大小是否大于给定的字体大小。

- **方法 `CPVT_FloatRect RearrangeSections(const CPVT_WordRange & PlaceRange)`* * :
-功能：重新排列指定范围内的段落，并返回新的矩形区域。

### 成员变量

- `bool m_bInitialized`: 标记文本对象是否已初始化。
- `bool m_bMultiLine`: 标记是否允许多行文本。
- `bool m_bLimitWidth`: 标记是否自动换行。
- `bool m_bAutoFontSize`: 标记是否自动调整字体大小。
- `uint16_t m_wSubWord`: 子单词（通常用于密码字符）。
- `int32_t m_nLimitChar`: 字符数限制。
- `int32_t m_nCharArray`: 字符数组的大小。
- `int32_t m_nAlignment`: 文本对齐方式。
- `float m_fLineLeading`: 行间距。
- `float m_fFontSize`: 字体大小。
- `std::vector<std::unique_ptr<CPVT_Section>> m_SectionArray`: 段落数组。
- `UnownedPtr<Provider > m_pVTProvider`: 指向 `Provider` 的未拥有指针。
- `std::unique_ptr<Iterator> m_pVTIterator`: 指向 `Iterator` 的智能指针。
- `CFX_FloatRect m_rcPlate`: 文本框的矩形区域。
- `CPVT_FloatRect m_rcContent`: 文本内容的矩形区域。

### 总结

`CPVT_VariableText` 类提供了丰富的接口来管理和操作 PDF 文档中的可变文本注释。它不仅支持文本内容的设置和获取，还提供了对文本格式、布局、字体映射等方面的精细控制。通过 `Iterator` 和 `Provider` 内部类，开发者可以方便地遍历和管理文本内容，同时利用 `Provider` 提供的字体映射功能来确保文本在不同环境下的正确显示。

// Copyright 2016 The PDFium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef CORE_FPDFDOC_CPVT_VARIABLETEXT_H_
#define CORE_FPDFDOC_CPVT_VARIABLETEXT_H_

#include <stdint.h>

#include <memory>
#include <vector>

#include "core/fpdfdoc/cpvt_floatrect.h"
#include "core/fpdfdoc/cpvt_line.h"
#include "core/fpdfdoc/cpvt_lineinfo.h"
#include "core/fpdfdoc/cpvt_wordplace.h"
#include "core/fpdfdoc/cpvt_wordrange.h"
#include "core/fxcrt/fx_codepage_forward.h"
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/unowned_ptr.h"
#include "core/fxcrt/widestring.h"

class CPVT_Section;
class CPVT_Word;
class IPVT_FontMap;
struct CPVT_WordInfo;

class CPVT_VariableText {
 public:
  class Iterator {
   public:
    explicit Iterator(CPVT_VariableText* pVT);
    ~Iterator();

    bool NextWord();
    bool NextLine();
    bool GetWord(CPVT_Word& word) const;
    bool GetLine(CPVT_Line& line) const;
    void SetAt(int32_t nWordIndex);
    void SetAt(const CPVT_WordPlace& place);
    const CPVT_WordPlace& GetWordPlace() const { return m_CurPos; }

   private:
    CPVT_WordPlace m_CurPos;
    UnownedPtr<const CPVT_VariableText> const m_pVT;
  };

  class Provider {
   public:
    explicit Provider(IPVT_FontMap* pFontMap);
    virtual ~Provider();

    virtual int GetCharWidth(int32_t nFontIndex, uint16_t word);
    virtual int32_t GetTypeAscent(int32_t nFontIndex);
    virtual int32_t GetTypeDescent(int32_t nFontIndex);
    virtual int32_t GetWordFontIndex(uint16_t word,
                                     FX_Charset charset,
                                     int32_t nFontIndex);
    virtual int32_t GetDefaultFontIndex();

    IPVT_FontMap* GetFontMap() { return m_pFontMap; }

   private:
    UnownedPtr<IPVT_FontMap> const m_pFontMap;
  };

  explicit CPVT_VariableText(Provider* Provider);
  ~CPVT_VariableText();

  void SetProvider(Provider* pProvider);
  Provider* GetProvider();
  CPVT_VariableText::Iterator* GetIterator();

  CFX_FloatRect GetContentRect() const;
  void SetPlateRect(const CFX_FloatRect& rect);
  const CFX_FloatRect& GetPlateRect() const;

  void SetAlignment(int32_t nFormat) { m_nAlignment = nFormat; }
  void SetPasswordChar(uint16_t wSubWord) { m_wSubWord = wSubWord; }
  void SetLimitChar(int32_t nLimitChar) { m_nLimitChar = nLimitChar; }
  void SetMultiLine(bool bMultiLine) { m_bMultiLine = bMultiLine; }
  void SetAutoReturn(bool bAuto) { m_bLimitWidth = bAuto; }
  void SetFontSize(float fFontSize) { m_fFontSize = fFontSize; }
  void SetCharArray(int32_t nCharArray) { m_nCharArray = nCharArray; }
  void SetAutoFontSize(bool bAuto) { m_bAutoFontSize = bAuto; }
  void Initialize();

  bool IsValid() const { return m_bInitialized; }

  void RearrangeAll();
  void RearrangePart(const CPVT_WordRange& PlaceRange);
  void SetText(const WideString& text);
  CPVT_WordPlace InsertWord(const CPVT_WordPlace& place,
                            uint16_t word,
                            FX_Charset charset);
  CPVT_WordPlace InsertSection(const CPVT_WordPlace& place);
  CPVT_WordPlace DeleteWords(const CPVT_WordRange& PlaceRange);
  CPVT_WordPlace DeleteWord(const CPVT_WordPlace& place);
  CPVT_WordPlace BackSpaceWord(const CPVT_WordPlace& place);

  int32_t GetTotalWords() const;
  float GetFontSize() const { return m_fFontSize; }
  int32_t GetAlignment() const { return m_nAlignment; }
  uint16_t GetPasswordChar() const { return GetSubWord(); }
  int32_t GetCharArray() const { return m_nCharArray; }
  int32_t GetLimitChar() const { return m_nLimitChar; }
  bool IsMultiLine() const { return m_bMultiLine; }
  bool IsAutoReturn() const { return m_bLimitWidth; }

  CPVT_WordPlace GetBeginWordPlace() const;
  CPVT_WordPlace GetEndWordPlace() const;
  CPVT_WordPlace GetPrevWordPlace(const CPVT_WordPlace& place) const;
  CPVT_WordPlace GetNextWordPlace(const CPVT_WordPlace& place) const;
  CPVT_WordPlace SearchWordPlace(const CFX_PointF& point) const;
  CPVT_WordPlace GetUpWordPlace(const CPVT_WordPlace& place,
                                const CFX_PointF& point) const;
  CPVT_WordPlace GetDownWordPlace(const CPVT_WordPlace& place,
                                  const CFX_PointF& point) const;
  CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace& place) const;
  CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace& place) const;
  CPVT_WordPlace GetSectionBeginPlace(const CPVT_WordPlace& place) const;
  CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace& place) const;
  void UpdateWordPlace(CPVT_WordPlace& place) const;
  CPVT_WordPlace PrevLineHeaderPlace(const CPVT_WordPlace& place) const;
  CPVT_WordPlace NextLineHeaderPlace(const CPVT_WordPlace& place) const;
  int32_t WordPlaceToWordIndex(const CPVT_WordPlace& place) const;
  CPVT_WordPlace WordIndexToWordPlace(int32_t index) const;

  uint16_t GetSubWord() const { return m_wSubWord; }

  float GetPlateWidth() const { return m_rcPlate.right - m_rcPlate.left; }
  float GetPlateHeight() const { return m_rcPlate.top - m_rcPlate.bottom; }
  CFX_PointF GetBTPoint() const;
  CFX_PointF GetETPoint() const;

  CFX_PointF InToOut(const CFX_PointF& point) const;
  CFX_PointF OutToIn(const CFX_PointF& point) const;
  CFX_FloatRect InToOut(const CPVT_FloatRect& rect) const;

  float GetFontAscent(int32_t nFontIndex, float fFontSize) const;
  float GetFontDescent(int32_t nFontIndex, float fFontSize) const;
  int32_t GetDefaultFontIndex();
  float GetLineLeading();
  float GetWordWidth(const CPVT_WordInfo& WordInfo) const;
  float GetWordWidth(int32_t nFontIndex,
                     uint16_t Word,
                     uint16_t SubWord,
                     float fFontSize,
                     float fWordTail) const;
  float GetWordAscent(const CPVT_WordInfo& WordInfo) const;
  float GetWordDescent(const CPVT_WordInfo& WordInfo) const;
  float GetWordAscent(const CPVT_WordInfo& WordInfo, float fFontSize) const;
  float GetWordDescent(const CPVT_WordInfo& WordInfo, float fFontSize) const;
  float GetLineAscent();
  float GetLineDescent();
  float GetLineIndent();

 private:
  int GetCharWidth(int32_t nFontIndex, uint16_t Word, uint16_t SubWord) const;
  int32_t GetWordFontIndex(uint16_t word,
                           FX_Charset charset,
                           int32_t nFontIndex);

  CPVT_WordPlace AddSection(const CPVT_WordPlace& place);
  CPVT_WordPlace AddLine(const CPVT_WordPlace& place,
                         const CPVT_LineInfo& lineinfo);
  CPVT_WordPlace AddWord(const CPVT_WordPlace& place,
                         const CPVT_WordInfo& wordinfo);
  float GetWordFontSize() const;

  void ClearSectionRightWords(const CPVT_WordPlace& place);

  bool ClearEmptySection(const CPVT_WordPlace& place);
  void ClearEmptySections(const CPVT_WordRange& PlaceRange);
  void LinkLatterSection(const CPVT_WordPlace& place);
  void ClearWords(const CPVT_WordRange& PlaceRange);
  CPVT_WordPlace ClearLeftWord(const CPVT_WordPlace& place);
  CPVT_WordPlace ClearRightWord(const CPVT_WordPlace& place);

  void Rearrange(const CPVT_WordRange& PlaceRange);
  float GetAutoFontSize();
  bool IsBigger(float fFontSize) const;
  CPVT_FloatRect RearrangeSections(const CPVT_WordRange& PlaceRange);

  bool m_bInitialized = false;
  bool m_bMultiLine = false;
  bool m_bLimitWidth = false;
  bool m_bAutoFontSize = false;
  uint16_t m_wSubWord = 0;
  int32_t m_nLimitChar = 0;
  int32_t m_nCharArray = 0;
  int32_t m_nAlignment = 0;
  float m_fLineLeading = 0.0f;
  float m_fFontSize = 0.0f;
  std::vector<std::unique_ptr<CPVT_Section>> m_SectionArray;
  UnownedPtr<Provider> m_pVTProvider;
  std::unique_ptr<Iterator> m_pVTIterator;
  CFX_FloatRect m_rcPlate;
  CPVT_FloatRect m_rcContent;
};

#endif  // CORE_FPDFDOC_CPVT_VARIABLETEXT_H_
